package com.bipbip.service;

import java.util.Date;

import com.bipbip.modelo.Empresa;
import com.bipbip.modelo.NotificacionStandard;
import com.bipbip.modelo.Publicacion;
import com.bipbip.modelo.Suscripcion;
import com.bipbip.modelo.Usuario;

public class NotificacionesFactory {

	public NotificacionStandard crearNotificacionDeSuscripcionAPublicacionDeViaje(
			Publicacion publicacion, Usuario suscriptor, Suscripcion suscripcion) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		String mensaje = String.format("%s %s quiere unirse a tu viaje",
				suscriptor.getNombre(), suscriptor.getApellido());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("road");
		notificacion.setLink("usuario/ResponderSolicitud/"
				+ suscripcion.getId().toString());
		notificacion.setUsuario(publicacion.getUsuario());
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionAceptarSuscripcion(
			Usuario usuarioQuePublico, Suscripcion suscripcion) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		String mensaje = String.format("%s %s aceptó tu solicitud",
				usuarioQuePublico.getNombre(), usuarioQuePublico.getApellido());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("ok-circle");
		notificacion.setLink("#");
		notificacion.setUsuario(suscripcion.getIdSolicitante());
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionRechazarSuscripcion(
			Usuario usuarioQuePublico, Suscripcion suscripcion) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		String mensaje = String.format("%s %s rechazó tu solicitud",
				usuarioQuePublico.getNombre(), usuarioQuePublico.getApellido());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("remove-circle");
		notificacion.setLink("#");
		notificacion.setUsuario(suscripcion.getIdSolicitante());
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionDespido(Empresa emp,
			Usuario usuario) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		notificacion.setMensaje("Te echaron de " + emp.getNombre());
		notificacion.setIcon("thumbs-down");
		notificacion.setLink("usuario/empresa");
		notificacion.setUsuario(usuario.getId());
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionContrato(Empresa emp,
			Usuario usuario) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		notificacion.setMensaje("Te contrataron de " + emp.getNombre());
		notificacion.setIcon("road");
		notificacion.setLink("usuario/empresa");
		notificacion.setUsuario(usuario.getId());
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionPedirTrabajo(Empresa emp,
			Usuario admin, Usuario usuario) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		notificacion.setMensaje(usuario.getApellido() + ", "
				+ usuario.getNombre() + " quiere formar parte de "
				+ emp.getNombre());
		notificacion.setIcon("briefcase");
		notificacion.setLink("usuario/empresa/pendientes");
		notificacion.setEmisor(usuario.getId());
		notificacion.setUsuario(admin.getId());
		notificacion.setTipo(NotificacionStandard.EMPLEO);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionSimple(String mensaje,
			Usuario de, Usuario para) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("comment");
		notificacion.setLink("mensajes/" + de.getId());
		notificacion.setEmisor(de.getId());
		notificacion.setUsuario(para.getId());
		notificacion.setTipo(NotificacionStandard.MENSAJE);
		return notificacion;
	}

	public NotificacionStandard crearComentarioPerfil(String mensaje,
			Usuario de, Usuario para) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("comment");
		notificacion.setLink("perfil");
		notificacion.setEmisor(de.getId());
		notificacion.setUsuario(para.getId());
		notificacion.setTipo(NotificacionStandard.COMENTARIO_PERFIL);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionDeCancelacionDeSuscripcion(
			Suscripcion s, Usuario quien, Integer dequien) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		String mensaje = String.format("%s %s cancelo la suscripcion",
				quien.getNombre(), quien.getApellido());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("remove-circle");
		notificacion.setLink("usuario/MisViajes");
		notificacion.setEmisor(quien.getId());
		notificacion.setUsuario(dequien);
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}

	public NotificacionStandard crearNotificacionDeCancelacionDeViaje(
			Publicacion p, Integer idSolicitante) {
		NotificacionStandard notificacion = new NotificacionStandard();
		notificacion.setFecha(new Date());
		String mensaje = String.format("Se canceló el viaje %s", p.getTitulo());
		notificacion.setMensaje(mensaje);
		notificacion.setIcon("remove-circle");
		notificacion.setLink("usuario/MisSuscripciones");
		notificacion.setEmisor(p.getUsuario());
		notificacion.setUsuario(idSolicitante);
		notificacion.setTipo(NotificacionStandard.SIMPLE);
		return notificacion;
	}
}
